#ifndef SROS_DEVICE_SUPPORT_PTOTO_HPP
#define SROS_DEVICE_SUPPORT_PTOTO_HPP

#include <nlohmann/json.hpp>

#include <string>
#include <vector>
#include <stdint.h>

// 编码器数据信息
struct EncoderStatus
{
    uint32_t id;     // 0水平 1垂直
    int32_t  pulse;  // 编码器脉冲累计值
    int32_t  pos;    // 编码器转换后的位置数值 mm

    NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(EncoderStatus, id, pulse, pos)
};

enum : uint8_t
{
    SET_POS = 0,         // 只有位置模式下该指令才生效
    SET_SPD = 1,         // 只有速度模式下该指令才生效
    SET_CURRENT = 2,     // 只有电流模式下该指令才生效
    SET_ENABLE = 3,      // 使能指令
    CLEAR_ERROR = 4,     // 故障清除指令
};

// 驱动器控制指令
struct DriverCmd
{
    uint8_t dir;    // 驱动器方向
    uint8_t cmd;   // 指令
    int32_t data;   // 指令数据            
   
    NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(DriverCmd, dir, cmd, data)
};

#endif